package com.ruoyi.drone.service;

import java.util.List;
import com.ruoyi.drone.domain.DroneTaskApplication;

/**
 * 任务接单Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IDroneTaskApplicationService 
{
    /**
     * 查询任务接单
     * 
     * @param applicationId 任务接单主键
     * @return 任务接单
     */
    public DroneTaskApplication selectDroneTaskApplicationByApplicationId(Long applicationId);

    /**
     * 查询任务接单列表
     * 
     * @param droneTaskApplication 任务接单
     * @return 任务接单集合
     */
    public List<DroneTaskApplication> selectDroneTaskApplicationList(DroneTaskApplication droneTaskApplication);

    /**
     * 根据任务ID查询任务接单列表
     * 
     * @param taskId 任务ID
     * @return 任务接单集合
     */
    public List<DroneTaskApplication> selectDroneTaskApplicationListByTaskId(Long taskId);

    /**
     * 根据飞手ID查询任务接单列表
     * 
     * @param pilotId 飞手ID
     * @return 任务接单集合
     */
    public List<DroneTaskApplication> selectDroneTaskApplicationListByPilotId(Long pilotId);

    /**
     * 根据任务ID和飞手ID查询任务接单
     * 
     * @param taskId 任务ID
     * @param pilotId 飞手ID
     * @return 任务接单
     */
    public DroneTaskApplication selectDroneTaskApplicationByTaskIdAndPilotId(Long taskId, Long pilotId);

    /**
     * 新增任务接单
     * 
     * @param droneTaskApplication 任务接单
     * @return 结果
     */
    public int insertDroneTaskApplication(DroneTaskApplication droneTaskApplication);

    /**
     * 修改任务接单
     * 
     * @param droneTaskApplication 任务接单
     * @return 结果
     */
    public int updateDroneTaskApplication(DroneTaskApplication droneTaskApplication);

    /**
     * 批量删除任务接单
     * 
     * @param applicationIds 需要删除的任务接单主键集合
     * @return 结果
     */
    public int deleteDroneTaskApplicationByApplicationIds(Long[] applicationIds);

    /**
     * 删除任务接单信息
     * 
     * @param applicationId 任务接单主键
     * @return 结果
     */
    public int deleteDroneTaskApplicationByApplicationId(Long applicationId);

    /**
     * 检查任务和飞手的接单记录是否唯一
     * 
     * @param taskId 任务ID
     * @param pilotId 飞手ID
     * @return 结果
     */
    public boolean checkTaskApplicationUnique(Long taskId, Long pilotId);

    /**
     * 更新任务接单状态
     * 
     * @param droneTaskApplication 任务接单
     * @return 结果
     */
    public int updateDroneTaskApplicationStatus(DroneTaskApplication droneTaskApplication);

    /**
     * 审核任务接单
     * 
     * @param droneTaskApplication 任务接单
     * @return 结果
     */
    public int auditDroneTaskApplication(DroneTaskApplication droneTaskApplication);

    /**
     * 飞手申请任务
     * 
     * @param droneTaskApplication 任务接单
     * @return 结果
     */
    public int applyTask(DroneTaskApplication droneTaskApplication);

    /**
     * 通过任务申请
     * 
     * @param applicationId 申请ID
     * @param auditBy 审核人
     * @return 结果
     */
    public int approveApplication(Long applicationId, String auditBy);

    /**
     * 拒绝任务申请
     * 
     * @param applicationId 申请ID
     * @param rejectReason 拒绝原因
     * @param auditBy 审核人
     * @return 结果
     */
    public int rejectApplication(Long applicationId, String rejectReason, String auditBy);

    /**
     * 取消任务申请
     * 
     * @param applicationId 申请ID
     * @return 结果
     */
    public int cancelApplication(Long applicationId);
}
